package com.isias.system.Util;

import com.isias.model.system.SysDept;
import com.isias.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

public class DeptUtil {

    /***
     * 1.找到父节点（parentid=0）
     * 2.通过父节点的id，来找到他的子节点(father.getid()=child.getParentid())
     * 3.通过子节点的id，来找到子节点的子节点.....（递归一直找，找到没有子节点为止）
     */


    public static List<SysDept> FindNodes(List<SysDept> menuList){
        //先创建一个集合，用来返回
        List<SysDept> list = new ArrayList<>();
        //遍历所有节点找到最顶层的节点（Parentid=0）
        for (SysDept menu : menuList) {
            if ("0".equals(menu.getParentId())) {
                //把父节点添加到list集合里，添加前，通过递归找到父节点下面的所有子节点
                list.add(findChildren(menu,menuList));

            }
        }

        return list;
    }

    private static SysDept findChildren(SysDept menu, List<SysDept> menuList) {
        menu.setChildren(new ArrayList<>());
        //遍历菜单每个元素
        for (SysDept sysDept : menuList) {
            //如果菜单中有元素的ParentId跟传入的menu的id相同，那就把菜单中的这个数据放到menu里的Children里
            if (menu.getId().equals(sysDept.getParentId())){
                //如果为空，就把子节点初始化一下，此步可省略
                if (menu.getChildren() == null){
                    menu.setChildren(new ArrayList<>());
                }
                //放入children里，放入之前再调用该方法，看这个节点下有没有子节点，如果有就先放入子节点，再传入menu里，以此类推(递归调用)
                menu.getChildren().add(findChildren(sysDept,menuList));
            }
        }
        return menu;
    }


}
